package level02.two;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * 一、定义一个标准的 Person 类，包含属性 name，包含 setget 方法,包含空参构造。
 * 使用反射的方式创建一个实例、并初始化，使用反射方式调用 setName 方法对名称进
 * 行设置,设置之后 在通过反射方式执行 getName()方法
 */
public class Test {
    public static void main(String[] args) throws Exception{
        //获取Person类的字节码对象
        Class<Person> personClass = Person.class;
        //获得空参构造器
        Constructor<Person> constructor = personClass.getDeclaredConstructor();
        //创建实例化对象
        Person person = constructor.newInstance();
        //person.setName("通过实例设置的名字");
        //通过反射调用setName方法
        Method setName = personClass.getDeclaredMethod("setName",String.class);
        setName.invoke(person,"通过反射设置的名字");
        //通过反射方式执行getName方法
        Method getName = personClass.getDeclaredMethod("getName");
        System.out.println(getName.invoke(person));

    }
}
